package com.tree.backend.utils;

/**
 * 用户上下文工具类
 * 使用ThreadLocal存储当前线程的用户信息，提供线程安全的用户信息访问机制
 */
public class UserContext {
    // 使用ThreadLocal存储用户ID
    private static final ThreadLocal<Integer> userIdHolder = new ThreadLocal<>();
    
    // 使用ThreadLocal存储公司ID
    private static final ThreadLocal<Integer> companyIdHolder = new ThreadLocal<>();

    /**
     * 设置当前线程的用户Id
     *
     * @param userId 用户Id
     */
    public static void setUserId(Integer userId) {
        userIdHolder.set(userId);
    }

    /**
     * 获取当前线程的用户Id
     *
     * @return 当前用户Id，如果不存在返回null
     */
    public static Integer getUserId() {
        return userIdHolder.get();
    }
    
    /**
     * 设置当前线程的公司Id
     *
     * @param companyId 公司Id
     */
    public static void setCompanyId(Integer companyId) {
        companyIdHolder.set(companyId);
    }

    /**
     * 获取当前线程的公司Id
     *
     * @return 当前公司Id，如果不存在返回null
     */
    public static Integer getCompanyId() {
        return companyIdHolder.get();
    }

    /**
     * 清除当前线程的用户信息
     * 在请求结束时调用，防止内存泄漏
     */
    public static void clear() {
        userIdHolder.remove();
        companyIdHolder.remove();
    }
}